#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

int MainWindow::stringToHex(QByteArray &charData,QByteArray &hexData)
{
    hexData = charData.toHex(' ').toUpper();
    return 0;
}


int MainWindow::hexToString(QByteArray &hexData, QByteArray &charData)
{
    QStringList list = QString(hexData).trimmed().split(QRegExp("\t|\n|\r\n|\r| |,|;")); //去除头尾空白，再分割

    foreach (QString n,  list)
    {
        if(n.isEmpty())continue;
        //n为无空格的hex数据，例如输入aa bbcc dd，bbcc会连在一起，此处debug打印n即可显示
        if(true==n.contains(QRegExp("^[0-9a-fA-F]{1,}$")))//仅匹配0-9,a-f,A-F
        {
            //true data
            charData+=QByteArray::fromHex(n.toUtf8());
        }
        else
        {
            //hex存在有误数据
            return -1;
        }
    }
    return 0;

//    //通用写法，比较繁琐
//    bool res,convertFailFlag=false;
//    foreach (QString n,  list )
//    {
//        if(n.isEmpty())continue;
//        //n为无空格的hex数据，例如输入aa bbcc dd，bbcc会连在一起，此处debug打印n即可显示
//        if(n.size()>2)
//        {
//            char num=0;
//            for(int i = 0;i < n.size();i += 2)
//            {
//                num = n.mid(i,2).toInt(&res,16);
//                if(res)
//                    charData.append(num);
//                else
//                    convertFailFlag=true;
//            }
//        }
//        else
//        {
//            int d= n.toInt(&res,16);
//            char  c = d;
//            if(res)
//            charData.append(c);
//            else
//            {
//               convertFailFlag=true;
//               //qWarning()<<"toInt:err!";
//            }
//        }
//    }
//    if(convertFailFlag)
//        return -1;
//    else
//        return 0;


}

//to string
#include <QMessageBox>
void MainWindow::on_pushButtonUp_clicked()
{
    QByteArray arrayHex=ui->textEditHex->toPlainText().toUtf8();
    QByteArray arrayChar;
    if(0==hexToString(arrayHex,arrayChar))
    {
        ui->textEditChar->setText(arrayChar);
    }
    else
    {
        QMessageBox::information(NULL, "提示", "请输入正确的格式：0-9，a-f，A-F", QMessageBox::Ok);
    }
}

//to hex
void MainWindow::on_pushButtonDown_clicked()
{
    QByteArray arrayHex;
    QByteArray arrayChar=ui->textEditChar->toPlainText().toUtf8();
    stringToHex(arrayChar,arrayHex);
    ui->textEditHex->setText(arrayHex);
}
